/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.com.asistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import pe.com.asistencia.bean.BeanAsistencia;
import pe.com.asistencia.util.Fechas;
import pe.com.asistencia.util.ManejoCalendario;

/**
 *
 * @author Usuario
 */
public class AsistenciaDAO {
public boolean agregar(BeanAsistencia bean, Connection con) throws SQLException
    {
       boolean x = false;

       String sql = "insert into asistencia(empleado,fecactual,entrada) values(?,?,?)";
       PreparedStatement ps = con.prepareStatement(sql);
       //Sustituir ? por valores
       Fechas f = new Fechas();

       ps.setInt(1,bean.getDni());
       ps.setDate(2, f.deStringaDate(bean.getFecha()));
       ps.setTimestamp(3,  f.getFechaHoraSistema());
//       ps.setTimestamp(4,  f.getFechaHoraSistema());
       ps.executeUpdate();
       x=true;
       return x;

    }
public boolean actualizar(BeanAsistencia bean, Connection con) throws SQLException
    {
       boolean x = false;
       String sql = "update asistencia set salida = ?, "
               + " horasxdia=(select timediff(?,entrada) as dia)"
               + " where empleado=? and fecactual=?";
       PreparedStatement ps = con.prepareStatement(sql);
       //Sustituir ? por valores
       Fechas f = new Fechas();
       ps.setTimestamp(1,  f.getFechaHoraSistema());
       ps.setTimestamp(2,  f.getFechaHoraSistema());
       ps.setInt(3,  bean.getDni());
       ps.setDate(4,  f.deStringaDate(bean.getFecha()));

       ps.executeUpdate();
       x=true;
       return x;

    }

public boolean buscarRegistroAsistencia(BeanAsistencia bean, Connection con) throws SQLException
     {
    boolean x = false;
   BeanAsistencia    beanc= null;
   String    sql = "select entrada from asistencia  where  empleado=? and fecactual=?";
   PreparedStatement  ps  = con.prepareStatement(sql);
   ps.setInt(1, bean.getDni());
   Fechas f = new Fechas();
   ps.setDate(2,  f.deStringaDate(bean.getFecha()));
   ResultSet  rs = ps.executeQuery();
   if (rs.next()){
      beanc = new  BeanAsistencia();
//       beanc.setDni(rs.getInt(1));
//       beanc.setFecha(rs.getString(2));
       beanc.setEntrada(f.getFechaDDMMYYYY_HHMMSS(rs.getTimestamp(1)));
//       beanc.setSalida(f.getFechaDDMMYYYY_HHMMSS(rs.getTimestamp(4)));
       x=true;
   }     
       return x;
    }

    public ArrayList<Map> buscarPersonalAsistencia(String fecha, Connection con)  throws  SQLException{
        //codcurso,   codalumno,  nombres, apellidos
       Map    m= null;
     ArrayList< Map>     lista =new  ArrayList<Map>();
     String sql =" select a.empleado, concat(e.apepaterno,' ', e.apematerno,', ', e.nombres) as nombres, concat('',time(a.entrada)) as entrada, concat('',time(a.salida)) as salida, concat('',a.horasxdia) as horasxdia, concat('',a.horasxmes) as horasxmes"
                 + " from asistencia a, empleado e "
                 + " where a.empleado = e.dni and a.fecactual = ? ";

       PreparedStatement  ps  = con.prepareStatement(sql);
       Fechas f = new Fechas();
       ManejoCalendario mc = new ManejoCalendario();
       ps.setDate(1,f.deStringaDate(fecha));
       ResultSet  rs = ps.executeQuery();
      while (rs.next()){
           m= new HashMap();
           m.put("empleado",    rs.getString(1));
           m.put("nombres",    rs.getString(2));
           m.put("entrada",  rs.getString(3));
           m.put("salida",    rs.getString(4));
           m.put("horasxdia",    rs.getString(5));
           m.put("horasxmes",   rs.getString(6));

           ///agregar a la lista
           lista.add(m);
       }
       return   lista;
    }

    public boolean controlEntrada(BeanAsistencia bean, Connection con) throws SQLException
    {
       boolean x = false;
       String sql = "call controlentrada(?)";
       PreparedStatement ps = con.prepareStatement(sql);
       //Sustituir ? por valores
       ps.setInt(1,bean.getDni());
       ps.executeUpdate();
       x=true;
       return x;
    }

    public boolean controlSalida(BeanAsistencia bean, Connection con) throws SQLException
    {
       boolean x = false;

       String sql = "call controlsalida(?)";
       PreparedStatement ps = con.prepareStatement(sql);
       //Sustituir ? por valores
       ps.setInt(1,  bean.getDni());
       ps.executeUpdate();
       x=true;
       return x;

    }
}

